home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / tcoop.arc / TCOOP2.ARC / OPTEXMPL.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-26  |  2.9 KB  |  124 lines

  1. // optexmpl.cpp: This simple program demonstrates how you can create
  2. // a simple dialog box--like those in QP--that displays a list of options
  3.  
  4. #include <string.h>
  5. #include "dialogue.h"
  6.  
  7. // Event says a list of options is being passed
  8.  
  9. const int PassedOpts = 0xfd00;
  10.  
  11. class OptButton : public Wso {
  12. public:
  13.   char Text[40];
  14.   int SelectStat;
  15.   OptButton(char *T, ColorPak &Cp);
  16.   virtual void Draw(void);
  17.   virtual void Activate(MsgPkt &M); 
  18.   virtual void Prompt(void);
  19.   virtual void UnPrompt(void);
  20. };
  21.  
  22. // ----------------------- Option Type -------------------- 
  23.  
  24. OptButton::OptButton(char *T, ColorPak &Cp)
  25. : Wso(0x00, 0x00, Cp)
  26. {
  27.   strcpy(Text, "[ ] ");
  28.   strncat(Text,T,35); Text[39] = 0; // Ensure null termination
  29.   SetSize(strlen(Text), 1);
  30.   SelectStat = False;
  31. }
  32.  
  33. void OptButton::Draw(void)
  34. {
  35.   Wso::Draw();
  36.   Panel->HzWrtB(0, 0, Text);
  37. }
  38.  
  39. void OptButton::Prompt(void)
  40. {
  41.   if (!Active) {
  42.      Wso::Prompt();
  43.      Panel->FillB(0, 0, 3, 1, Panel->Colors.Pc, 1);
  44.   }
  45. }
  46.  
  47. void OptButton::UnPrompt(void)
  48. {
  49.   if (Active) {
  50.      Panel->FillB(0, 0, 3, 1, Panel->Colors.Wc, 1);
  51.      Wso::UnPrompt();
  52.   }
  53. }
  54.  
  55. void OptButton::Activate(MsgPkt &)
  56. {
  57.   if (SelectStat) {
  58.     Panel->HzWrtB(1, 0, " ");
  59.     SelectStat = False;
  60.   }
  61.   else {
  62.     Panel->HzWrtB(1, 0, "X");
  63.     SelectStat = True;
  64.   }
  65. }
  66.  
  67. void PopupOpt(Wso *W, MsgPkt &M)
  68. // Popup a dialogue box containing several options 
  69. {
  70.   DlgBox     *DB;
  71.   OptButton  *IoOpt;
  72.   OptButton  *StackOpt;
  73.   OptButton  *RangeOpt;
  74.   CmndButton *OK;
  75.   CmndButton *Cancel;
  76.  
  77.   DB = new DlgBox(0x11, WindowStyle-BorderPrompt, InvColors);
  78.   DB->SetSize(30,5);
  79.   DB->Open(W, (W->Panel->Interior->Wd-DB->Panel->Overall->Wd) / 2,
  80.               (W->Panel->Interior->Ht-DB->Panel->Overall->Ht) / 2);
  81.   DB->Panel->Interior->Box(4,2,22,5,0x11,DB->Panel->Colors.Wc);
  82.   DB->Panel->Interior->HzWrtB(7,0,"Compiler Options");
  83.  
  84.   IoOpt = new OptButton("I/O Checking", InvColors);
  85.   IoOpt->Open(DB, 6, 3);
  86.   StackOpt = new OptButton("Stack Checking", InvColors);
  87.   StackOpt->Open(DB, 6, 4);
  88.   RangeOpt = new OptButton("Range Checking", InvColors);
  89.   RangeOpt->Open(DB, 6, 5);
  90.  
  91.   OK = new CmndButton("OK", InvColors);
  92.   Cancel = new CmndButton("Cancel", InvColors);
  93.  
  94.   OK->Open(DB,
  95.            DB->Panel->Frame->Wd - OK->Panel->Frame->Wd -
  96.            Cancel->Panel->Frame->Wd-6,
  97.            DB->Panel->Frame->Ht-2);
  98.   Cancel->Open(DB,
  99.                DB->Panel->Frame->Wd - Cancel->Panel->Frame->Wd-4,
  100.                DB->Panel->Frame->Ht-2);
  101.  
  102.   M.RtnCode = Idle; M.Code = Idle;
  103.   OK->SwitchFocus(M);
  104.   do {
  105.     DB->SubMgr->EventStep(M);
  106.     M.Code = M.RtnCode;
  107.   } while (M.Code != ShutDown &&
  108.           (!DB->Active || M.Code != Close || M.Focus != (Iso *)DB));
  109.   if (M.Code == Close) {
  110.      DB->OnClose(M);
  111.      M.RtnCode = Idle;
  112.   }
  113.   delete DB;
  114. }
  115.  
  116. main()
  117. {
  118.   Setup(MouseOptional, CyanColors);
  119.   FullScrn->Panel->Clear(177, 0x07);
  120.   PopupOpt(FullScrn, StartMsg);
  121.   CleanUp();
  122. }
  123.  
  124.